home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / bin / scsi_mandat < prev    next >
Text File  |  2008-05-03  |  3KB  |  121 lines

  1. #!/bin/bash
  2. # scsi_mandat
  3. #
  4. # Script to test compliance with SCSI mandatory commands.
  5. # The vintage is SPC-3 and SPC-4 (see www.t10.org).
  6. #
  7. # Coverage:
  8. # Command                Standard/Draft (is mandatory in)
  9. # -------------------------------------------------------
  10. # INQUIRY (standard)     SCSI-2, SPC, SPC-2, SPC-3, SPC-4
  11. # INQUIRY (VPD pages 0, 0x83)     SPC-2, SPC-3, SPC-4
  12. # REPORT LUNS            SPC-3, SPC-4
  13. # TEST UNIT READY        SCSI-2, SPC, SPC-2, SPC-3, SPC-4
  14. # REQUEST SENSE          SCSI-2, SBC, SBC-2,3, MMC-4,5, SSC-2,3
  15. # SEND DIAGNOSTIC        SBC, SBC-2,3, SSC-2,3
  16. #
  17. # This script uses utilities frim sg3_utils package (version
  18. # 1.21 or later) and sdparm (version 0.99 or later)
  19. #
  20. # Douglas Gilbert 20070317
  21.  
  22.  
  23. log=0
  24. quiet=0
  25.  
  26. file_err=0
  27. inv_opcode=0
  28. illeg_req=0
  29. not_ready=0
  30. medium=0
  31. other_err=0
  32. recovered=0
  33. sanity=0
  34. syntax=0
  35. timeout=0
  36. unit_attention=0
  37. aborted_command=0
  38.  
  39. total_err=0
  40.  
  41. usage()
  42. {
  43.   echo "Usage: scsi_mandat [-h] [-L] [-q] <device>"
  44.   echo "  where:  -h    print usage message"
  45.   echo "          -L, --log        append stderr to 'scsi_mandat.err'"
  46.   echo "          -q    suppress some output"
  47.   echo ""
  48.   echo "Check <device> for manadatory SCSI command support"
  49. }
  50.  
  51. if (( $# < 1 ))
  52.   then
  53.     usage
  54.     exit 1
  55. fi 
  56.  
  57. # opt=$1
  58. # echo ${opt##-*}
  59.  
  60. opt="$1"
  61. while test ! -z "$opt" -a -z "${opt##-*}"; do
  62.   opt=${opt#-}
  63.   case "$opt" in
  64.     h|-help) usage ; exit 0 ;;
  65.     L|-log) let log=$log+1 ;;
  66.     q|-quiet) let quiet=$quiet+1 ;;
  67.     *) echo "Unknown option: -$opt " ; exit 1 ;;
  68.   esac
  69.   shift
  70.   opt="$1"
  71. done
  72.  
  73. for command in "sg_inq" "sg_luns" "sg_turs" "sg_requests" "sg_vpd" \
  74.                 "sg_vpd -i" "sg_senddiag -t"
  75. do
  76.   if [ $quiet -eq 0 ]
  77.     then echo "$command" $1
  78.   fi
  79.  
  80.   if [ $log -eq 0 ]
  81.   then
  82.     $command $1 > /dev/null 2>> /dev/null
  83.   else
  84.     $command $1 > /dev/null 2>> scsi_mandat.err
  85.   fi
  86.   res=$?
  87.   case "$res" in
  88.     0) ;;
  89.     1) echo "  syntax error" ; let syntax=$syntax+1 ;;
  90.     2) echo "  not ready" ; let not_ready=$not_ready+1 ;;
  91.     3) echo "  medium error" ; let medium=$medium+1 ;;
  92.     5) echo "  illegal request, general" ; let illeg_req=$illeg_req+1 ;;
  93.     6) echo "  unit attention" ; let unit_attention=$unit_attention+1 ;;
  94.     9) echo "  illegal request, invalid opcode" ; let inv_opcode=$inv_opcode+1 ;;
  95.     11) echo "  aborted command" ; let aborted_command=$aborted_command+1 ;;
  96.     15) echo "  file error with $1 " ; let file_err=$file_err+1 ;;
  97.     20) echo "  no sense" ; let other_err=$other_err+1 ;;
  98.     21) echo "  recovered error" ; let recovered_err=$recovered_err+1 ;;
  99.     33) echo "  timeout" ; let timeout=$timeout+1 ;;
  100.     97) echo "  response fails sanity" ; let sanity=$sanity+1 ;;
  101.     98) echo "  other SCSI error" ; let other_err=$other_err+1 ;;
  102.     99) echo "  other error" ; let other_err=$other_err+1 ;;
  103.     *) echo "  unknown exit status for sg_inq: $res" ; let other_err=$other_err+1 ;;
  104.   esac
  105. done
  106.  
  107. echo ""
  108. let total_bad_err=$file_err+$inv_opcode+$illeg_req+$medium+$aborted_command
  109. let total_bad_err+=$other_err+$recovered+$sanity+$syntax+$timeout
  110.  
  111. let total_allow_err=$not_ready+$unit_attention
  112.  
  113.   echo "total number of bad errors: $total_bad_err "
  114.  
  115. if [ $total_allow_err -gt 0 ]
  116.   then
  117.   echo "total number of allowable errors: $total_allow_err "
  118. fi
  119.  
  120. exit $total_bad_err
  121.